home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Cream of the Crop 21
/
Cream of the Crop 21 (Terry Blount) (October 1996).iso
/
program
/
oxcc1434.zip
/
DOC
/
C.GRM
< prev
next >
Wrap
Text File
|
1995-11-06
|
17KB
|
976 lines
/*--- C grammar with extensions for oxcc multipass compiler ---*/
/*
Norman D. Culver
Oxbow Software
1323 S.E. 17th Street #662
Ft. Lauderdale, FL 33316
(305) 527-1663 Voice
(305) 760-7584 Fax
(305) 760-4679 Data
norman.culver@channel1.com
ndc@gcomm.com
Copyright 1994 by Norman D. Culver, All Rights Reserved.
*/
/*
NOTE -- THE DEADWOOD IN THIS GRAMMAR IS THERE BECAUSE OF THE NEED TO
RUNTIME INTERPRET AND/OR REGENERATE SOURCE FROM THE AST TREE
NOTE -- PRODUCTIONS TERMINATED WITH $$; DO NOT MAKE AST NODES
NOTE -- THE COMPILER COMPILER DERIVES ANY UNFORCED TERMINALS
NOTE -- THIS IS THE ACTUAL GRAMMAR USED BY THE PARSER GENERATOR `lrg'
*/
/* Force a couple of terminal symbol values */
#1 {meta-name}
#2 {typedef-name}
/*--- Operator Precedence. ---*/
!( '?' )
!( '||' )
!( '&&' )
!( '|' )
!( '^' )
!( '&' )
!( '==' '!=' )
!( '<' '>' '<=' '>=' )
!( '<<' '>>' )
!( '+' '-' )
!( '*' '/' '%' )
/*--- Phrase Structure Grammar ---*/
File
-> [Input]... <eof> ;
Input
-> OuterDecl $$;
-> FuncDef $$;
-> Directive $$;
-> OuterAnf $$;
-> SegStuff $$;
SegStuff
-> __segdef__ DeclID [SegList] ';' ;
-> __seguse__ DeclID ';' ;
SegList
-> ConstExp \','... $$;
FuncDef
-> [FrontSpec]
FuncDeclarator
[Attr]
[InnerDecl]...
FuncBody ;
NestedFuncDef
-> FrontSpec
FuncDeclarator
FuncBody ;
FuncDeclarator
-> Declarator ;
FuncBody
-> LB
[DeclOrFunc]...
[StmtC]...
BodyExit ;
BodyExit
-> RB ;
OuterDecl
-> [FrontSpec] [InitDeclarator \','...] ';'
=> classify (typedef 'InitDeclarator' 'TypeAgain' 'ParenDeclarator'
'DeclID' <identifier> {meta-name} {typedef-name}) ;
InnerDecl
-> FrontSpec [InitDeclarator \','...] ';'
=> classify (typedef 'InitDeclarator' 'TypeAgain' 'ParenDeclarator'
'DeclID' <identifier> {meta-name} {typedef-name}) ;
FrontSpec
-> TypeDefs $$;
-> DeclarationSpec... $$;
TypeDefs
-> TypeDef TdElem... $$;
-> TypeDef Esu... $$;
-> TypeDef TypedefName $$;
-> TypeDef TypeAgain \','... $$;
TypeDef
-> typedef ;
TdElem
-> Type $$;
-> Qualifier $$;
TypeAgain
-> TypedefName InitRHS ; /* reuse of computed typedef */
-> Identifier InitRHS ;
DeclarationSpec
-> TypeSpec $$;
-> StorageClassSpec $$;
-> Qualifier $$;
-> FuncTypeModifier $$;
InitDeclarator
-> Declarator [Attr] ;
-> Declarator [Attr] InitRHS ;
Declarator
-> [Pointer] DirectDeclarator $$;
Pointer
-> '*' [Qualifier]... ;
-> '*' [Qualifier]... Pointer ;
DirectDeclarator
-> DeclID $$;
-> ParenDeclarator $$;
-> DirectDeclarator ArrayDecl $$;
-> DirectDeclarator FuncParams $$;
DeclID
-> <identifier> ;
-> {meta-name} ;
ParenDeclarator
-> '(' Declarator ')' ;
ArrayDecl
-> '[' [BinopC] ']' ;
FuncParams
-> '(' [ParamList] ')' ;
ParamList
-> Param \','... ;
-> Param \','... ',' '...' ;
-> '...' ;
Param
-> SpecQual... InitDeclarator ;
-> SpecQual... [NoNameDeclarator] ;
-> Identifier ;
NoNameDeclarator
-> Pointer ;
-> [Pointer] DirectNoNameDeclarator ;
DirectNoNameDeclarator
-> ParenNoNameDeclarator $$;
-> [DirectNoNameDeclarator] ArrayDecl $$;
-> [DirectNoNameDeclarator] FuncParams $$;
ParenNoNameDeclarator
-> '(' NoNameDeclarator ')' ;
InitRHS
-> '=' Init ;
TypeSpec
-> Specs $$;
-> DynType $$;
DynType
-> TypedefName $$;
-> TypeOf $$;
Specs
-> Type $$;
-> Esu $$;
Esu
-> EnumSpec $$;
-> StructSpec $$;
-> UnionSpec $$;
Type
-> void ;
-> char ;
-> short ;
-> int ;
-> long ;
-> float ;
-> double ;
-> signed ;
-> unsigned ;
-> _segment ;
-> __segment ;
FuncTypeModifier
-> inline ;
-> __inline__ ;
-> __inline ;
-> _cdecl ;
-> __cdecl ;
-> _pascal ;
-> __pascal ;
-> _fortran ;
-> __fortran ;
-> _interrupt ;
-> __interrupt ;
-> _ifunc ;
-> _loadds ;
-> __loadds ;
-> _export ;
-> __export ;
-> _fastcall ;
-> _saveregs ;
-> __saveregs ;
-> _syscall ;
-> __syscall ;
-> _stdcall ;
-> __stdcall ;
Qualifier
-> Based ;
-> const ;
-> volatile ;
-> __volatile__ ;
-> _far ;
-> __far ;
-> _near ;
-> __near ;
-> _huge ;
-> __huge ;
-> _seg16 ;
-> __seg16 ;
-> _far16 ;
-> __far16 ;
-> register ;
Based
-> _based '(' BaseExp ')' $$;
-> __based '(' BaseExp ')' $$;
BaseExp
-> CastExp ;
-> _self ;
-> __self ;
SpecQual
-> TypeSpec $$;
-> Qualifier $$;
TypedefName
-> {meta-name} => require ({meta-name} {typedef-name}) ;
TypeOf
-> typeof '(' CastExp ')' ;
StorageClassSpec
-> extern ;
-> static ;
-> _ival ;
-> auto $$;
StructSpec
-> struct Tag ;
-> struct '{' StructMembers... '}' ;
-> struct Tag '{' StructMembers... '}' ;
-> _Packed struct '{' StructMembers... '}' ;
-> _Packed struct Tag '{' StructMembers... '}' ;
UnionSpec
-> union Tag ;
-> union '{' StructMembers... '}' ;
-> union Tag '{' StructMembers... '}' ;
StructMembers
-> MemberSpec Members ';' ; /* Allow unnamed structs and unions etc. */
MemberSpec
-> [Qualifier]... Type... $$; /* restrictions should be removed */
-> [Qualifier]... Esu $$;
-> [Qualifier]... DynType $$;
Members
-> SMember \','... $$;
SMember
-> Member $$;
-> Bitfield $$;
Member
-> MemberDeclarator [Attr] ;
-> [Attr] ;
Bitfield
-> FieldSize [Attr] ;
-> MemberDeclarator FieldSize [Attr] ;
FieldSize
-> ':' BinopC ;
MemberDeclarator
-> [Pointer] DirectDeclarator $$;
EnumSpec
-> enum Tag ;
-> enum '{' Enumerator \','... [','] '}' ;
-> enum Tag '{' Enumerator \','... [','] '}' ;
Tag
-> <identifier> ;
-> {meta-name} ;
Enumerator
-> EnumID ;
-> EnumID EnumInit ;
EnumID
-> <identifier> ;
EnumInit
-> '=' BinopC ;
Init
-> InitBlock $$;
-> InitExp $$;
InitBlock
-> '{' InitInner \','... [','] '}' ;
InitExp
-> AssignExp ;
InitInner
-> InitId InitBlock $$;
-> InitId InitExp $$;
-> InitBlock $$;
-> InitExp $$;
InitId
-> AryElem... '=' ;
-> '.' InitLabel '=' ;
-> InitLabel ':' ;
AryElem
-> '[' InitElem ']' $$;
InitElem
-> Constant ;
InitLabel
-> <identifier> ;
-> {meta-name} ;
Attr
-> Attr1 '(' Constant ')' ')' ')' ;
-> Attr1 ')' ')' ;
-> Attr1 '(' Identifier ')' ')' ')' ;
-> Attr1 '(' Identifier ',' Constant ',' Constant ')' ')' ')' ;
Attr1
-> __attribute__ '(' '(' AttrId $$;
AttrId
-> <identifier> ;
-> {meta-name} ;
/* Statements */
StmtC
-> ';' ; /*0*/
-> Exp ';' ; /*1*/
-> goto Identifier ';' ; /*2*/
-> continue ';' ; /*3*/
-> break ';' ; /*4*/
-> return [RetExp] ';' ; /*5*/
-> if '(' IfExp ')' IfStmtC ; /*6*/
-> if '(' IfExp ')' IfStmtC else ElseStmtC ; /*7*/
-> switch '(' SwExp ')' SwStmtC ; /*8*/
-> while '(' WhileExp ')' WhileStmtC ; /*9*/
-> do DoStmtC while '(' DoExp ')' ';' ; /*10*/
-> for '(' [ForInit] FS1 [ForCond] FS2 [ForPost] ')' ForStmtC ; /*11*/
-> BlockC ; /*12*/
-> Label ':' [StmtC] ; /*13*/
-> AsmStmt ; /*14*/
-> AnfBlock ; /*15*/
FS1
-> ';' ;
FS2
-> ';' ;
RetExp
-> Exp ;
IfExp
-> Exp ;
SwExp
-> Exp ;
WhileExp
-> Exp ;
DoExp
-> Exp ;
IfStmtC
-> StmtC ;
ElseStmtC
-> StmtC ;
DoStmtC
-> StmtC ;
WhileStmtC
-> StmtC ;
ForStmtC
-> StmtC ;
SwStmtC
-> StmtC ;
ForInit
-> Exp ;
ForCond
-> Exp ;
ForPost
-> Exp ;
BlockC
-> BlockEntry
[Local]...
[DeclOrFunc]...
[StmtC]...
BlockExit ;
BlockEntry
-> LB ;
BlockExit
-> RB ;
DeclOrFunc
-> InnerDecl $$;
-> NestedFuncDef $$;
Local
-> __label__ Local